import matplotlib.pyplot as plt
from cartopy.io import shapereader
from cartopy.crs import PlateCarree
from matplotlib.cm import YlOrRd  # 生成颜色
from matplotlib.colors import rgb2hex, Normalize  # rgba转换16进制
from matplotlib.colorbar import ColorbarBase  # 颜色条

plt.rcParams[u'font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False  # 设置正常显示符号

# 创建绘图区   #大致情况，但是我们还是得借助于cartopy
# fig, ax = plt.subplots(figsize=(18, 10), subplot_kw={'projection': 'aitoff'})
# ax.grid()
# ax.set_title('Aitoff')
# plt.show()

# 获取文件路径信息，没有则下载
filename = shapereader.natural_earth(resolution='110m', category='cultural', name='admin_0_countries')

# 创建地理文件阅读器对象
reader = shapereader.Reader(filename)

# 创建世界地图的绘图区
fig, ax = plt.subplots(figsize=(18, 10), subplot_kw={'projection': PlateCarree()})

# 获取各个国家信息
# 假设热度最大值200
max_values = 200
# 添加各个国家的边界线信息
for i, record in enumerate(reader.records()):
    rgba = YlOrRd(i / max_values)  # rgba
    color = rgb2hex(rgba, keep_alpha=False)  # 16进制
    print(color)
    ax.add_geometries([record.geometry], PlateCarree(), facecolor=color,
                      edgecolor='g')  # 这里record.geometry要写在中括号里，否则出错

# 创建新的绘图区
new_axes = fig.add_axes([0.92, 0.2, 0.025, 0.6])
# 创建归一转化器
norm = Normalize(vmin=0, vmax=max_values)  # 之后往里面扔的数据都转化为0~1之间的数字 比如norm(100)=0.5
# 创建颜色条并添加到绘图区
ColorbarBase(new_axes, cmap=YlOrRd, norm=norm, label='颜色条')
plt.show()
